///**
// * @作者 伟子涵
// * @微信公号 搬砖暗夜码农
// * @开源项目 $ https://gitee.com/zhouwei5208888
// * @我的博客 $ http://itzhouwei.com
// * @创建时间 2023/9/7 16:30
// */
//package com.itzhouwei.commerce.redis;
//
//import org.springframework.data.geo.*;
//import org.springframework.data.redis.connection.RedisGeoCommands;
//import org.springframework.data.redis.core.HashOperations;
//import org.springframework.data.redis.core.RedisTemplate;
//
//import java.util.List;
//import java.util.stream.Collectors;
//
///**
// * @description: Redis GEO 工具类
// * @author：zw，微信：yingshengzw
// * @date: 2023/9/7
// * @Copyright： 公众号：搬砖暗夜码农 | 博客：https://itzhouwei.com - 沉淀、分享、成长，让自己和他人都能有所收获！
// */
//@SuppressWarnings("all")
//public class GeoUtil {
//
//    private static RedisTemplate<String, Object> redisTemplate;
//
//    public GeoUtil (RedisTemplate redisTemplate){
//        GeoUtil.redisTemplate = redisTemplate;
//    }
//
//    /**
//     * 删除元素 zrem
//     *
//     * @param key
//     * @param value
//     */
//    public static Long removeGeo(String key, String value) {
//        return redisTemplate.opsForGeo().remove(key, value);
//    }
//
//
//    /***
//     * 将指定的地理空间位置（纬度、经度、名称）添加到指定的key中。
//     * @param key redis的key
//     * @param precision   经度
//     * @param dimension   纬度
//     * @param obj  对象
//     * @return
//     */
//    public static Long geoAdd(String key, double precision, double dimension, Object obj) {
//        //对应redis原生命令:GEOADD user 116.48105 39.996794 zhangsan
////        Long addedNum = redisTemplate.opsForGeo().add("city", new Point(116.405285, 39.904989), "北京");
//        Long addedNum = redisTemplate.opsForGeo().add(key, new Point(precision, dimension), obj);//params: key, Point(经度, 纬度), 地方名称
//        return addedNum;
//    }
//
//
//    /***
//     * 以给定的经纬度为中心， 返回键包含的位置元素当中， 与中心的距离不超过给定最大距离的所有位置元素，并给出所有位置元素与中心的平均距离。
//     * @param key redis的key
//     * @param precision 经度
//     * @param dimension 纬度
//     * @param distance 距离
//     * @param count 人数
//     * @return
//     */
//    public static GeoResults<RedisGeoCommands.GeoLocation<Object>> nearByXY(String key, double precision, double dimension, Integer distance, Integer count) {
//        Circle circle = new Circle(new Point(precision, dimension), new Distance(distance, Metrics.KILOMETERS));//Point(经度, 纬度) Distance(距离量, 距离单位)
//        RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending().limit(count);
//        GeoResults<RedisGeoCommands.GeoLocation<Object>> results = redisTemplate.opsForGeo()
//                .radius(key, circle, args);//params: key, Circle, GeoRadiusCommandArgs
//        return results;
//    }
//
//
//    public static <T> List<T> hGetAll(String key) {
//        HashOperations<String,String, T> operation = redisTemplate.opsForHash();
//        return operation.entries(key).values().stream().collect(Collectors.toList());
//    }
//
//    public static <T> T hGet(String key,String item) {
//        HashOperations<String,String, T> operation = redisTemplate.opsForHash();
//        return operation.get(key,item);
//    }
//
//    public static boolean hSet(String key,String item,Object value) {
//        try {
//            redisTemplate.opsForHash().put(key,item,value);
//        }catch (Exception e){
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }
//
//    public static boolean hHsh(String key,String item){
//        return redisTemplate.opsForHash().hasKey(key,item);
//    }
//}
